package com.his.emr.print;

import java.io.File;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import com.his.emr.print.entity.MyPage;
import com.his.emr.print.entity.MyPages;
import com.his.emr.print.utils.My;
import com.his.emr.print.utils.MyFileReader;
import com.his.emr.print.utils.MyFileWriter;

/**
 * Add 2018年2月9日<br>
 * @author Wxg
 *
 */
public class BuildFinalPrintString {
	private Document doc;
	private MyPages pages;
	private StringBuilder sbb;
	
	/**
	 * Add 2018年2月10日
	 * 是否将结果输出到本地磁盘;YES:是;NO:否;
	 */
	private static final String IF_OUTPUT_FILE = My.conf("IF_OUTPUT_FILE");
	
	public BuildFinalPrintString (String genFilepath, MyPages pages){
		this.pages = pages;
		sbb = new StringBuilder();
		try {
			this.doc = Jsoup.parse(new File(genFilepath), "UTF-8");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public String finalPrintPage(){
		head();
		main();
		foot();
		String htmlStr = sbb.toString();
		
		/**
		 * 如果在配置文件中开启,将把结果输出到磁盘,方便调试
		 */
		if("YES".equalsIgnoreCase(IF_OUTPUT_FILE)){
			MyFileWriter mfw = new MyFileWriter("html_");;
			mfw.writeb(htmlStr);
			/**
			 * 别忘记close了
			 */
			mfw.close();
		}
		
		return htmlStr;
	}
	
	private void main(){
		MyFileReader mfr = null;
		int i = 1; // 页码
		for(MyPage page : pages.getPages()){
			// page_header : 要放到page循环中
			mfr = new MyFileReader("com/his/emr/print/html/a102/pageHeader.html");
			for(String str : mfr.list()){
				sbb.append(str);
			}
			
			for(String id : page.getIds()){
				sbb.append( doc.getElementById(id).outerHtml() );
			}
			
			// page_footer : 要放到page循环中
			mfr = new MyFileReader("com/his/emr/print/html/a102/pageFooter.html");
			for(String str : mfr.list()){
				if(str.contains("{{page}}")){
					str = str.replace("{{page}}", i+"");
				}
				sbb.append(str);
			}
			i++;
		}
	}
	
	private void head(){
		sbb.append("<html>");
		// head
		sbb.append("<head>");
		
		/**
		 * 百度UE iframe中没有设置这个meta属性,这在某些情况下会产生乱码
		 * 特别是通过`renderJson`这种方法传递到前台时会出现乱码,如果输出到文件,某些浏览器比较智能,会自动识别(或者浏览器本身默认的就是UTF8)
		 */
		sbb.append("<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>");
		
		// 提取原html中的head内容
		if(null != doc){
			Element head = doc.getElementsByTag("head").get(0);
			for(Element ele : head.children()){
				sbb.append( ele.outerHtml() );
			}
		}
		//加入自己的style(放在后面)
		MyFileReader mfr = new MyFileReader("com/his/emr/print/html/a102/mystyle.html");
		for(String str : mfr.list()){
			sbb.append(str);
		}
		sbb.append("</head>");
		// body
		sbb.append("<body>");
	}
	
	private void foot(){
		sbb.append("</body>");
		sbb.append("</html>");
	}
}
